
#include "Compuerta.h"

Compuerta:: Compuerta(int x, int y, int ID, int tiempo): ElementoCircuital(x, y, ID){
	entrada_1=NULL;
	entrada_2=NULL;
	tiempo_transicion=tiempo;
}

Compuerta:: ~Compuerta(){
	liberar_entradas();
}

bool Compuerta:: ready(){
	if (entrada_1!=NULL && entrada_2!=NULL)
		return true;
	else
		return false;
}

void Compuerta:: set_entrada(Conexion* cable){
	int nro=cable->get_nro_entrada();
	switch (nro) {
		case 1:{
			entrada_1=cable;break;
		}
		case 2: {
			entrada_2=cable;break;
		}
		default: throw NoValidConexionExcepcion();//El numero de entrada es incorrecto
			break;
	}

	if(cable->get_emisor() != NULL)
		(cable->get_emisor())->agregar_conexion(cable, cable->get_nro_salida());
}


void Compuerta:: liberar_entradas(){
	if(entrada_1)
		(entrada_1->get_emisor())->cortar_cable(entrada_1->get_id());
	if(entrada_2)
		(entrada_2->get_emisor())->cortar_cable(entrada_2->get_id());
	}

void Compuerta::desconectar_entrada(int nro){
	switch (nro) {
			case 1:{
				entrada_1=NULL;break;
			}
			case 2: {
				entrada_2=NULL;break;
			}
			default: throw NoSimulacionExcepcion();//El numero de entrada es incorrecto
				break;
		}
}
